class Solution {
    public static String minWindow(String ss, String tt) { // 参数名是可以修改的
        // 先统计tt字符串中字符出现的次数
        char[] t = tt.toCharArray(); // 可以更好的去拿到字符
        char[] s = ss.toCharArray();
        int[] hashT = new int[58];
        for (char x : t) {
            hashT[x-'A']++;
        }
        // 遍历ss字符串找到符合要求的字符串
        int left = 0;
        int right = 0;
        int[] hashS = new int[58];
        int count = 0;
        int lenT = t.length;
        int lenS = s.length;
        String ans = ""; // 这里不能初始化为null，注意区分两者
        while (right < lenS) {
            char x = s[right];
            hashS[x-'A']++;
            // 判断是否为有效字符
            if (hashS[x-'A'] <= hashT[x-'A']) {
                count++;
            }
            // 更新结果
            while (count == lenT) {
                if (ans.equals("")) {
                    ans = ss.substring(left, right+1);
                } else {
                    ans = ans.length() > right-left ? ss.substring(left, right+1) : ans;
                }
                // 先得判断left对应位置的字符是不是有效的字符
                char i = s[left++];
                if (hashS[i-'A'] <= hashT[i-'A']) {
                    count--;
                }
                hashS[i-'A']--;
            }
            right++;
        }
        return ans;
    }
    public static void main(String[] args) {
        System.out.println(minWindow("ADOBECODEBANC", "ABC"));
    }
}